

//
//  Person.m
//  07-内存管理
//
//  Created by dllo on 16/7/12.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import "Person.h"

@implementation Person
//MRC下的setter方法
// assign修饰下的setter方法
- (void)setNumber:(NSInteger)number {
    _number = number;
}
// retain修饰下的setter方法
- (void)setName:(NSString *)name {
    if (_name != name) {
        [_name release];
        _name = [name retain];
    }
}
// copy修饰下的setter方法
- (void)setSexual:(NSString *)sexual {
    if (_sexual != sexual) {
        [_sexual release];
        _sexual = [sexual copy];
    }
}

- (void)sayHello {
    NSLog(@"Hello");

}
- (id)copyWithZone:(NSZone *)zone {
// 开辟新的空间,创建一个新的对象
    Person *per = [[Person allocWithZone:zone] init];
    // 浅拷贝,只创建新的对象,但是所有的属性还指向原来的属性
    per.name = self.name;
    per.sexual = self.sexual;
    // 深拷贝, 不止创建新的对象,所有属性,也对应拷贝一份
    // NSString 内部已经签订了协议
    per.name = [self.name copy];
    per.sexual = [self.sexual copy];
    return per;
}
- (void)dealloc{
    // 释放所有的属性生成的成员变量(语义使用retain,copy的需要release)
    [_person release];
    [_mId release];
    [_mDescription release];
    [_name release];
    [_sexual release];
    
    [super dealloc];
}
    // 赋值用, 在这个方法中,编写找不到key值得处理措施
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
    if ([key isEqualToString:@"id"]) {
        self.mId = value;
    }
    if ([key isEqualToString:@"describtion"]) {
        self.mDescription = value;
    }
}
    // 取值用
- (id)valueForUndefinedKey:(NSString *)key {

    return nil;

}



@end
